class MyQueue {
    /*
        思路：双栈，输入栈push数据，输出栈pop数据
        每次pop数据，如果输出栈为空，则将输入栈的数据全部压入到输出栈中
    */
    private Deque<Integer> in;
    private Deque<Integer> out;

    public MyQueue() {
        in = new LinkedList<>();
        out = new LinkedList<>();
    }

    public void push(int x) {
        in.push(x);
    }

    public int pop() {
        // 当输出栈为空的时候，move
        if(out.isEmpty()){
            move();
        }
        return out.pop();
    }

    public int peek() {
        // 当输出栈为空的时候，move
        if(out.isEmpty()){
            move();
        }
        return out.peek();
    }
    public boolean empty() {
        move();
        return out.isEmpty();
    }
    // 将输入栈的元素移动到输出栈中
    private void move(){
        while (!in.isEmpty()){
            out.push(in.pop());
        }
    }
}